import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created with IntelliJ IDEA.
 * Description: 文件流，字节的读操作
 */
public class Demo8 {
    public static void main(String[] args) {
        //构造方法中需要指定打开文件的路径
        //此处的路径可以是绝对路径，相对路径，File对象
        /*InputStream inputStream = null;
        try {
            //1. 创建对象，同时也是打开文件
            inputStream = new FileInputStream("d:/test.txt");
            //2. 尝试一个字节一个字节读，把整个文件都读完
            while(true) {
                int ret = inputStream.read();
                //-1表示读到了文件末尾
                if(ret == -1) {
                    break;
                }
                System.out.println(ret);
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            //3. 关闭文件
            try {
                inputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }*/

        //一次读一个字节
        //要想放到try的括号里面，需要实现Closeable这个interface
        //这里所有的流对象，都实现了Closeable
        /*try(InputStream inputStream = new FileInputStream("d:/test.txt")) {
            while(true) {
                int ret = inputStream.read();
                if(ret == -1) {
                    break;
                }
                System.out.println(ret);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }*/

        //一次读多个字节，读磁盘的速度很慢，因此这种比上面一个一个读的效率要高不少
        try(InputStream inputStream = new FileInputStream("d:/test.txt")) {
            while(true) {
                byte[] buffer = new byte[1024];
                //此时的返回值表示传输到buffer中的字节数
                //buffer称为输出型参数
                int len = inputStream.read(buffer);
                //返回-1表示文件读取结束
                if(len == -1) {
                    break;
                }
                for(int i = 0; i < len; i++) {
                    System.out.println(buffer[i]);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
